/*
A strange lift
题目描述
有一天桐桐做了一个梦，梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯，而且第i层楼(1≤i≤N)上有一个数字K；(0≤Ki≤N)。电梯只有四 个按钮：开，关，上，下。上下的层数等于当前楼层上的那个数字。当然，如果不能满足要求，相应的按钮就会失灵。例如：3 3 1 2 5代表了Ki (K1=3，K2=3，…)，从一楼开始。在一楼，按“上，”可以到4楼，按“下”是不起作用的，因为没有-2楼。那么，从A楼到B楼至少要按几次按钮 呢？
输入
第1行为三个正整数，表示N，A，B(1≤N≤200，1≤A，B≤N)；
第2行为N个正整数，表示Ki。
输出
1行，即最少按键次数，若无法到达，则输出-1。
样例输入
5 1 5
3 3 1 2 5
样例输出
3
*/
#include <bits/stdc++.h>
#define ll long long
#define PI acos(-1)
#define M(n, m) memset(n, m, sizeof(n));
const int INF = 1e9 + 7;
const int maxn = 1e5;
using namespace std;

struct data
{
    int x;
    int step;
}st, pre;
int n, A, B, dis[222];
bool flag, vis[222];

void BFS()
{
    queue<data> que;
    st.x = A;
    st.step = 0;
    vis[A] = 1;
    que.push(st);
    while (!que.empty())
    {
        st = que.front();
        que.pop();
        if (st.x == B)
        {
            printf("%d\n", st.step);
            flag = true;
            return;
        }
        // 往下移动,dis[st.x] 表示可以移动的楼层数
        int x = st.x - dis[st.x];
        if (x >= 1 && !vis[x])
        {
            vis[x] = 1;
            pre.x = x;
            pre.step = st.step + 1;
            que.push(pre);
        }
        // 往上移动
        x = st.x + dis[st.x];
        if (x <= n && !vis[x])
        {
            vis[x] = 1;
            pre.x = x;
            pre.step = st.step + 1;
            que.push(pre);
        }
    }
}

int main()
{
    while (scanf("%d", &n) && n)
    {
        scanf("%d%d", &A, &B);
        for (int i = 1;i <= n;i ++)
            scanf("%d", &dis[i]);
        flag = false;
        M(vis, 0)
        BFS();
        if (!flag)
            printf("-1\n");
    }
    return 0;
}
